package com.le.tester.book.effectivejava3rdchinese.articleeightythree;

import org.apache.lucene.document.FieldType;

/**
 * createTime：2022/10/11 11:14
 * description：请注意使用懒加载的形式来进行初始化，个人感觉如果实例是没有变化的话，可以使用静态的初始化，
 * 那么比如是说在初始化支付参数的时候。完全可以使用使用static静态来初始化
 */
public class Demo {
    private FieldType fieldType;

    //双重检查
    private volatile FieldType fieldTypePlus;

    //同步进行初始化
    private synchronized FieldType getFieldType() {
        if (null == fieldType) {
            // TODO
        }
        return fieldType;
    }


    //双检查中，那么这边在多线程的情况下，依然还是有可能出现多个实例的情况
    //这边的话直接联想到单例双检查模式，双重锁单例模式，但是这边的单例模式，直接建议使用的是enum
    private FieldType getFieldTypePlus() {
        //注意这里使用了一个局部变量,整个性能的提升
        FieldType result = fieldTypePlus;
        if (null == result) {
            synchronized (this) {
                if (null == fieldTypePlus) {
                    //TODO
                    //fieldTypePlus=result=;
                }
            }
        }
        return result;
    }
}
